package cn.otrue.patienthealthmanager.activity;

import java.util.ArrayList;
import java.util.List;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import cn.otrue.patienthealthmanager.HealthApplication;
import cn.otrue.patienthealthmanager.R;
import cn.otrue.patienthealthmanager.adapter.HomeSurroundAdapter;
import cn.otrue.patienthealthmanager.bean.HomeSurround;
import cn.otrue.patienthealthmanager.view.XListView;
import cn.otrue.patienthealthmanager.view.XListView.IXListViewListener;

import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.core.PoiItem;
import com.amap.api.services.core.SuggestionCity;
import com.amap.api.services.poisearch.PoiItemDetail;
import com.amap.api.services.poisearch.PoiResult;
import com.amap.api.services.poisearch.PoiSearch;
import com.amap.api.services.poisearch.PoiSearch.OnPoiSearchListener;
import com.amap.api.services.poisearch.PoiSearch.SearchBound;

/**
 * 帖子回复
 * 
 * @author G
 * 
 */
public class FuJinActivity extends BaseActivity implements IXListViewListener,
		OnPoiSearchListener {

	private HomeSurroundAdapter sa;
	private List<HomeSurround> hss;

	private XListView lv_community_partition;

	private int totalPage = 0;

	private LatLonPoint lp = new LatLonPoint(HealthApplication.getInstance()
			.getLatitude(), HealthApplication.getInstance().getLongitude());// 默认西单广场
	private String cityStr = HealthApplication.getInstance().getCityName();

	private ProgressDialog progDialog = null;// 搜索时进度条
	private int currentPage = 0;// 当前页面，从0开始计数
	private PoiSearch.Query query;// Poi查询条件类
	private String deepType = "医疗";// poi搜索类型
	private PoiSearch poiSearch;
	private PoiResult poiResult; // poi返回的结果
	private List<PoiItem> poiItems;// poi数据
	private String keyword = ""; // 搜索的关键字

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_fujin_yiyuan);

		initView();
		init();
	}

	/**
	 * 初始化AMap对象
	 */
	private void init() {
		currentPage = 0;
		doSearchQuery(currentPage);

	}

	private void initView() {
		bu_suosu = (Button) findViewById(R.id.bu_suosu);
		bu_suosu.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				hss.clear();
				// nearbySearch(currentPage);
				currentPage = 0;
				if (TextUtils.isEmpty(tv_fujin.getText().toString().trim())) {
					keyword = "";
				} else {
					keyword = tv_fujin.getText().toString().trim();
				}
				doSearchQuery(currentPage);
				sa.notifyDataSetChanged();
			}
		});
		tv_fujin = (EditText) findViewById(R.id.tv_fujin);
		lv_community_partition = (XListView) findViewById(R.id.lv_community_partition);
		lv_community_partition.setPullLoadEnable(true); // 是否开启上拉加载
		lv_community_partition.setXListViewListener(this);// 上啦加载和下拉刷新的监听
		lv_community_partition.setOnItemClickListener(new OnItemClickListener() {

					@Override
					public void onItemClick(AdapterView<?> parent, View view,
							int position, long id) {
						// TODO Auto-generated method stub
						Intent intent = new Intent(FuJinActivity.this,
								DoctorSheQuyiyuanActivity.class);
						String name = hss.get(position - 1).getValue();
						String poId=hss.get(position - 1).getPoiId();
						intent.putExtra("homesurround",hss.get(position-1));
						intent.putExtra("Name", name);
						intent.putExtra("poId", poId);
						startActivity(intent);

					}
				});
		hss = new ArrayList<HomeSurround>();

		initTitleBar();

		sa = new HomeSurroundAdapter(hss, FuJinActivity.this);
		lv_community_partition.setAdapter(sa);
	}

	public void initTitleBar() {
		TextView tv_title_title = (TextView) findViewById(R.id.tv_title_title);
		tv_title_title.setText(R.string.com);

		TextView tv_title_back = (TextView) findViewById(R.id.tv_title_back);
		tv_title_back.setVisibility(View.VISIBLE);
		tv_title_back.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				finish();
			}
		});

	}

	private void nearbySearch(int i) {

	}

	private EditText tv_fujin;
	private Button bu_suosu;

	@Override
	protected void onDestroy() {
		super.onDestroy();

	}

	private void onLoad() {
		lv_community_partition.stopRefresh();
		lv_community_partition.stopLoadMore();
		lv_community_partition.setRefreshTime("刚刚");
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {

		default:
			break;
		}

	}

	@Override
	public void onRefresh() {
		// TODO Auto-generated method stub
		currentPage = 0;
		hss.clear();
		doSearchQuery(currentPage);
		sa.notifyDataSetChanged();
		onLoad();
	}

	@Override
	public void onLoadMore() {
		// TODO Auto-generated method stub
		currentPage++;
		doSearchQuery(currentPage);
		sa.notifyDataSetChanged();
		onLoad();
	}

	@Override
	public void onPoiItemDetailSearched(PoiItemDetail arg0, int arg1) {
		// TODO Auto-generated method stub

	}

	public void onPoiSearched(PoiResult result, int rCode) {
		// TODO Auto-generated method stub
		dissmissProgressDialog();// 隐藏对话框
		if (rCode == 0) {
			if (result != null && result.getQuery() != null) {// 搜索poi的结果
				if (result.getQuery().equals(query)) {// 是否是同一条
					poiResult = result;
					poiItems = poiResult.getPois();// 取得第一页的poiitem数据，页数从数字0开始
					List<SuggestionCity> suggestionCities = poiResult
							.getSearchSuggestionCitys();// 当搜索不到poiitem数据时，会返回含有搜索关键字的城市信息
					if (poiItems != null && poiItems.size() > 0) {
						for (PoiItem p : poiItems) {

							HomeSurround hs = new HomeSurround(String.valueOf(p
									.getLatLonPoint().getLatitude()),
									String.valueOf(p.getLatLonPoint()
											.getLongitude()), String.valueOf(p
											.getDistance()), p.getTitle(),
									String.valueOf(p.getProvinceName()),
									String.valueOf(p.getProvinceCode()),
									String.valueOf(p.getCityName()),
									String.valueOf(p.getCityCode()),
									String.valueOf(p.getPoiId()));
							hss.add(hs);
						}
						sa.notifyDataSetChanged();// ˢ��
						totalPage = poiResult.getPageCount();// ��ȡ�ܷ�ҳ��

					} else if (suggestionCities != null
							&& suggestionCities.size() > 0) {/*
															 * showSuggestCity(
															 * suggestionCities
															 * );
															 */
					} else {/*
							 * ToastUtil.show(PoiAroundSearchActivity.this,
							 * R.string.no_result);
							 */
					}
				}
			} else {/*
					 * ToastUtil .show(PoiAroundSearchActivity.this,
					 * R.string.no_result);
					 */
			}
		} else if (rCode == 27) {/*
								 * ToastUtil .show(PoiAroundSearchActivity.this,
								 * R.string.error_network);
								 */
		} else if (rCode == 32) {/*
								 * ToastUtil.show(PoiAroundSearchActivity.this,
								 * R.string.error_key);
								 */
		} else {/*
				 * ToastUtil.show(PoiAroundSearchActivity.this,getString(R.string
				 * .error_other) + rCode);
				 */
		}
	}

	/**
	 * 开始进行poi搜索
	 */
	protected void doSearchQuery(int currentPage) {
		showProgressDialog();// 显示进度框
		// currentPage = 0;
		query = new PoiSearch.Query(keyword, deepType, cityStr);// 第一个参数表示搜索字符串，第二个参数表示poi搜索类型，第三个参数表示poi搜索区域（空字符串代表全国）
		query.setPageSize(10);// 设置每页最多返回多少条poiitem
		query.setPageNum(currentPage);// 设置查第一页

		poiSearch = new PoiSearch(this, query);
		poiSearch.setOnPoiSearchListener(this);
		poiSearch.setBound(new SearchBound(lp, 2000, true));// 设置搜索区域为以lp点为圆心，其周围2000米范围

		poiSearch.searchPOIAsyn();// 异步搜索

	}

	/**
	 * 显示进度框
	 */
	private void showProgressDialog() {
		if (progDialog == null)
			progDialog = new ProgressDialog(this);
		progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
		progDialog.setIndeterminate(false);
		progDialog.setCancelable(false);
		progDialog.setMessage("正在搜索中");
		progDialog.show();
	}

	public void nextSearch() {
		if (query != null && poiSearch != null && poiResult != null) {
			if (poiResult.getPageCount() - 1 > currentPage) {
				currentPage++;

				query.setPageNum(currentPage);// 设置查后一页
				poiSearch.searchPOIAsyn();
			} else {
				// ToastUtil.show(this, "无搜索xf");
			}
		}
	}

	/**
	 * 隐藏进度框
	 */
	private void dissmissProgressDialog() {
		if (progDialog != null) {
			progDialog.dismiss();
		}
	}
	/*
	 * boolean equals(java.lang.Object o) 比较两个POI 的id 是否相等。 java.lang.String
	 * getAdCode() 返回POI 的行政区划代码。 java.lang.String getAdName() 返回POI 的行政区划名称。
	 * java.lang.String getCityCode() 返回POI的城市编码 java.lang.String getCityName()
	 * 返回POI的城市名称。 java.lang.String getDirection() 返回逆地理编码查询时POI坐标点相对于地理坐标点的方向。
	 * int getDistance() 获取 POI 距离中心点的距离。 java.lang.String getEmail()
	 * 返回POI的电子邮件地址。 LatLonPoint getEnter() 返回POI入口经纬度。 LatLonPoint getExit()
	 * 返回POI出口经纬度。 LatLonPoint getLatLonPoint() 返回POI的经纬度坐标 java.lang.String
	 * getPoiId() 返回POI 的id，即其唯一标识。 java.lang.String getPostcode() 返回POI的邮编。
	 * java.lang.String getProvinceCode() 返回 POI 的省/自治区/直辖市/特别行政区编码。
	 * java.lang.String getProvinceName() 返回POI的省/自治区/直辖市/特别行政区名称 。
	 * java.lang.String getSnippet() 返回POI的地址。 java.lang.String getTel()
	 * 返回POI的电话号码。 java.lang.String getTitle() 返回POI的名称。 java.lang.String
	 * getTypeDes() 返回POI 的类型描述。 java.lang.String getWebsite() 返回POI的网址。 int
	 * hashCode() 继承自Object，直接返回POI id 的hashcode。 boolean isDiscountInfo()
	 * 此POI是否有优惠信息。 boolean isGroupbuyInfo() 此POI是否有团购信息。 boolean isIndoorMap()
	 * 返回是否支持室内地图 。 void setAdCode(java.lang.String adcode) 设置POI 的行政区划代码。 void
	 * setAdName(java.lang.String adname) 设置POI 的行政区划名称。 void
	 * setCityCode(java.lang.String mCityCode) 设置POI的城市编码。 void
	 * setCityName(java.lang.String cityname) 设置POI 的城市名称。 void
	 * setDirection(java.lang.String direction) 设置逆地理编码查询时POI坐标点相对于地理坐标点的方向。
	 * void setDiscountInfo(boolean isDiscountInfo) 设置POI是否有优惠信息。 void
	 * setDistance(int distance) 设置 POI 到中心点的距离。 void setEmail(java.lang.String
	 * email) 设置POI的电子邮件地址。 void setEnter(LatLonPoint enterPoint) 设置POI入口经纬度。
	 * void setExit(LatLonPoint exitPoint) 设置POI出口经纬度。 void
	 * setGroupbuyInfo(boolean isGroupupbuyInfo) 设置POI是否有团购信息。 void
	 * setPostcode(java.lang.String postcode) 设置POI的邮编。 void
	 * setProvinceCode(java.lang.String provinceCode) 设置 POI 的省/自治区/直辖市/特别行政区编码。
	 * void setProvinceName(java.lang.String provincename) 设置POI
	 * 的省/自治区/直辖市/特别行政区名称。 void setTel(java.lang.String tel) 设置POI 的电话号码。 void
	 * setTypeDes(java.lang.String typedes) 设置POI 的类型描述。 void
	 * setWebsite(java.lang.String website) 设置POI的网址。 java.lang.String
	 * toString() 继承自Object，返回POI 的名称（name）。
	 */
}
